<?php

namespace app\payment\admin;

use app\common\builder\ZBuilder;
use app\payment\model\PaymentPayCompany as CompanyConfigModel;

/**
 * 支付公司配置管理控制器
 */
class PayCompany extends Index
{

    protected function initialize()
    {
        parent::initialize();
        if ($this->no_auth) {
            $this->error('权限不足！');
        }

        if (in_array(request()->action(), ['add'])) {
            if (!$this->add_safe) {
                $this->error('NO');
            }
        }
        if (in_array(request()->action(), ['delete'])) {
            if (!$this->delete_safe) {
                $this->error('NO');
            }
        }

        $this->default_param['merchant_day_recharge_type_cash_sum'] = pay_config('merchant_day_recharge_type_cash_sum');
        $this->default_param['merchant_min_recharge_cash'] = pay_config('merchant_min_recharge_cash');
        $this->default_param['merchant_max_recharge_cash'] = pay_config('merchant_max_recharge_cash');
    }

    /**
     * 首页
     * @param string $group 分组
     * @return mixed
     */
    public function index($group = '')
    {
        // 公司配置分组信息
        $list_group = pay_config('config_group');
        if (isset($list_group['pay_config'])) {
            unset($list_group['pay_config']);
        }

        $group = $group ? $group : current(array_keys($list_group));

        $tab_list = [];
        foreach ($list_group as $key => $value) {
            $tab_list[$key]['title'] = $value;
            $tab_list[$key]['url'] = url('index', ['group' => $key]);
        }

        // 查询
        $map = $this->getMap();
        $map[] = ['group', '=', $group];

        // 排序
        $order = $this->getOrder('sort asc,id asc');
        // 数据列表
        $data_list = CompanyConfigModel::where($map)->order($order)->paginate();
        $items = [
            ['name', '名称'],
            ['title', '标题'],
            ['merchant_id', '商户号'],
            ['app_id', '应用ID'],
            ['day_recharge_cash_sum', '每天最多充值金额（元）', 'text.edit'],
            ['status', '状态', 'switch'],
            ['sort', '排序', 'text.edit'],
            ['right_button', '操作', 'btn']
        ];
        if ($this->role > $this->have_auth) {
            unset($items[3]);
        }
        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('支付公司配置管理') // 设置页面标题
            ->setTabNav($tab_list, $group) // 设置tab分页
            ->setSearch(['name' => '名称', 'title' => '标题']) // 设置搜索框
            ->addColumns($items)
            ->addRightButton('see', ['title' => '查看', 'icon' => 'fa fa-fw fa-eye', 'href' => url('see', ['id' => '__id__'])], true)
            ->addValidate('PayCompany', 'name,title') // 添加快捷编辑的验证器
            ->addOrder('name,title,status') // 添加标题字段排序
            ->addFilter('name,title') // 添加标题字段筛选
            ->addFilterMap('name,title', ['group' => $group]) // 添加标题字段筛选条件
            ->addTopButton('add', ['href' => url('add', ['group' => $group])], true) // 添加单个顶部按钮
            ->addTopButtons('enable,disable,delete') // 批量添加顶部按钮
            ->addRightButton('edit', [], true)
            ->addRightButton('delete') // 批量添加右侧按钮
            ->setRowList($data_list) // 设置表格数据
            ->setPageTips('非开发者请勿操作')
            ->fetch(); // 渲染模板
    }

    /**
     * 新增
     * @param string $group 分组
     * @return mixed
     */
    public function add($group = '')
    {
        // 保存数据
        if ($this->request->isPost()) {
            // 表单数据
            $data = $this->request->post();

            if ($this->merchant_info['trade_pwd'] != md5(md5(md5($data['trade_pwd'])))) {
                $this->error('交易密码不正确！');
            }

            unset($data['trade_pwd']);

            if (empty($data['name'])) {
                $this->error('公司配置名称不能为空！');
            }
            $data['name'] = $data['group'] . '_' . $data['name'];
            // 验证
            $result = $this->validate($data, 'PayCompany');
            if (true !== $result) {
                $this->error($result);
            }
            // 支付类型
            if (isset($data['payment_type'])) {
                $data['payment_type'] = json_encode($data['payment_type']);
            }
            // 每天支付类型对应充值金额限制
            if (isset($data['day_recharge_type_cash_sum'])) {
                $data['day_recharge_type_cash_sum'] = json_encode($data['day_recharge_type_cash_sum']);
            }
            // 支付类型对应的费率
            if (isset($data['payment_type_rate'])) {
                $data['payment_type_rate'] = json_encode($data['payment_type_rate']);
            }
            // 每次最小充值金额
            if (isset($data['min_recharge_cash'])) {
                $data['min_recharge_cash'] = json_encode($data['min_recharge_cash']);
            }
            // 每次最大充值金额
            if (isset($data['max_recharge_cash'])) {
                $data['max_recharge_cash'] = json_encode($data['max_recharge_cash']);
            }
            // 支付类型对应的固定充值金额
            if (isset($data['payment_type_cash'])) {
                $data['payment_type_cash'] = str_replace(' ', '', $data['payment_type_cash']);
                $data['payment_type_cash'] = str_replace("，", ",", $data['payment_type_cash']);
                $data['payment_type_cash'] = json_encode($data['payment_type_cash']);
            }

            $data['bind_merchant'] = str_replace('，', ',', str_replace(' ', '', $data['bind_merchant']));

            $data['notify_ip'] = str_replace('，', ',', str_replace(' ', '', $data['notify_ip']));

            $start_time = explode(':', $data['start_time']);
            $data['start_time'] = $start_time[0] * 3600 + $start_time[1] * 60 + $start_time[2];
            $end_time = explode(':', $data['end_time']);
            $data['end_time'] = $end_time[0] * 3600 + $end_time[1] * 60 + $end_time[2];
            if ($data['end_time'] < $data['start_time']) {
                $this->error('结束时间不能大于开始时间');
            }

            if ($temp = CompanyConfigModel::create($data)) {
                $forward = $this->request->param('_pop') == 1 ? null : cookie('__forward__');
                // 记录行为
                action_log('payment_pay_company_add', 'payment_pay_company', $temp['id'], UID, json_encode($temp));
                $this->success('新增成功', $forward, '_close_pop');
            } else {
                $this->error('新增失败');
            }
        }
        // 公司配置分组信息
        $payment_type = pay_config('payment_type');
        $config_group = pay_config('config_group');
        if (isset($config_group['pay_config'])) {
            unset($config_group['pay_config']);
        }

        $checkbox_payment_type = ['alipay_h5'];
        if ($group) {
            $checkbox_payment_type = pay_config('supply_payment_type', $group);
        }

        $temp = [
            ['radio', 'group', '公司配置分组', '', $config_group, $group],
            ['checkbox', 'payment_type', '支付类型', '请选择支付类型', pay_config('payment_type'), $checkbox_payment_type],
            ['text', 'title', '公司标题', '一般由中文组成，仅用于显示'],
            ['text', 'name', '公司配置名称', '如果第三方提供的商户号是数字，就填商户号，如 <code>12345678</code>：如果不是数字就填类似拼音，如 <code>mingcheng</code>'],
            ['text', 'merchant_id', '商户号', '该公司配置的商户号'],
            ['text', 'app_id', '应用id', '该公司配置的应用id'],
            ['textarea', 'key', '密钥', '该公司配置的密钥'],
            ['textarea', 'public_key', '商户公钥', '该公司配置的商户公钥'],
            ['textarea', 'other_public_key', '其他公钥', '该公司配置的其他公钥'],
            ['textarea', 'other_one', '参数一', '其它参数一'],
            ['textarea', 'other_two', '参数二', '其它参数二'],
            ['textarea', 'other_three', '参数三', '其它参数三'],
            ['textarea', 'other_four', '参数四', '其它参数四'],
            ['textarea', 'other_five', '参数五', '其它参数五'],
            ['radio', 'jump_open', '跳转开关', '开启会封装上游网址跳转 <code>开启起风控作用</code>', ['禁用', '启用'], 1],
            ['text', 'domain_name', '域名', '配合跳转开关使用，起风控作用，域名结尾不加斜杠，如<code>https://www.baidu.com</code>'],
            ['text', 'day_recharge_cash_sum', '每天最多充值金额总数', '支付公司<code>每天最多充值金额总数</code>', $this->default_param['merchant_day_recharge_type_cash_sum']],
            ['textarea', 'tips', '公司配置说明', '该公司配置的具体说明'],
            ['text', 'sort', '排序', '', 100],
            ['radio', 'refund_open', '退款开关', '', ['禁用', '启用'], 1],
            ['radio', 'status', '状态', '', ['禁用', '启用'], 1],
            ['text', 'second_ok', '创建订单间隔多少秒', '该公司间隔多少秒才能创建订单 <code>默认0不限制</code>', 0],
            ['text', 'success_count', '通道每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>', 0],
            ['text', 'vip_user_success', '用户VIP充值每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>', 0],
            ['text', 'wait_second', '请求上游等待多少秒', '超过等待时间走下一家 <code>默认3秒</code>', 3],
            ['time', 'start_time', '开始时间', '', '00:00:00'],
            ['time', 'end_time', '结束时间', '', '00:00:00'],
            ['textarea', 'bind_merchant', '绑定白名单商户号', '绑定中的商户号不受此支付公司限制，多个商户号用逗号分隔（,）<code>空表示无绑定</code>'],
            ['textarea', 'notify_ip', '上游服务端通知IP白名单', '多个IP用逗号分隔（,）<code>空表示无限制</code>'],
        ];

        $day_recharge_type_cash_sum = [];
        // 支付类型对应每天最多充值金额
        foreach ($payment_type as $key => $value) {
            $day_recharge_type_cash_sum[] = [
                'text',
                'day_recharge_type_cash_sum' . '[' . $key . ']', //name值
                "$value 每天最多充值金额",
                "默认每天最多充值金额为<code>{$this->default_param['merchant_day_recharge_type_cash_sum']}</code>",
                $this->default_param['merchant_day_recharge_type_cash_sum']
            ];
        }

        $payment_type_rate = [];
        // 支付类型对应的费率
        foreach ($payment_type as $key => $value) {
            $payment_type_rate[] = [
                'text',
                'payment_type_rate' . '[' . $key . ']', //name值
                "$value 费率",
                '比如：<code>0.05</code>，用户支付<code>100</code>元，收取手续费<code>5</code>元',
                0.03,
            ];
        }

        $min_recharge_cash = [];
        // 最小充值金额
        foreach ($payment_type as $key => $value) {
            $min_recharge_cash[] = [
                'text',
                'min_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最小充值金额",
                "每次最小充值金额为<code>{$this->default_param['merchant_min_recharge_cash']}</code>",
                $this->default_param['merchant_min_recharge_cash'],
            ];
        }

        $max_recharge_cash = [];
        // 最大充值金额
        foreach ($payment_type as $key => $value) {
            $max_recharge_cash[] = [
                'text',
                'max_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最大充值金额",
                "每次最大充值金额为<code>{$this->default_param['merchant_max_recharge_cash']}</code>",
                $this->default_param['merchant_max_recharge_cash'],
            ];
        }

        $payment_type_cash = [];
        // 支付类型对应的固定充值金额
        foreach ($payment_type as $key => $value) {
            $payment_type_cash[] = [
                'text',
                'payment_type_cash' . '[' . $key . ']', //name值
                "$value 对应的固定充值金额",
                "<code>空表示任意金额</code>,多个固定金额请用逗号分开：比如 <code>10,20,30,50,100</code>",
                '',
            ];
        }

        $group_item = [
            [
                'type' => 'group',
                'options' => [
                    '支付类型对应每天最多充值金额' => $day_recharge_type_cash_sum,
                    '支付类型对应的费率' => $payment_type_rate,
                    '支付类型每次最小充值金额' => $min_recharge_cash,
                    '支付类型每次最大充值金额' => $max_recharge_cash,
                    '支付类型对应的固定充值金额' => $payment_type_cash,
                ]
            ]
        ];

        //$items = array_merge($temp, $day_recharge_type_cash_sum, $payment_type_rate, $min_recharge_cash, $max_recharge_cash, $payment_type_cash);

        $trade_pwd = [['password', 'trade_pwd', '交易密码', '6-16位']];
        $items = array_merge($temp, $group_item, $trade_pwd);

        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('新增')
            ->addFormItems($items)
            ->fetch();
    }

    /**
     * 编辑
     * @param int $id
     * @return mixed
     */
    public function edit($id = 0)
    {
        if ($id === 0) {
            $this->error('参数错误！');
        }

        // 保存数据
        if ($this->request->isPost()) {
            // 表单数据
            $data = $this->request->post();

            if ($this->merchant_info['trade_pwd'] != md5(md5(md5($data['trade_pwd'])))) {
                $this->error('交易密码不正确！');
            }

            unset($data['trade_pwd']);

            $str_group = strlen($data['group']);
            if (substr($data['name'], 0, $str_group) != $data['group']) {
                $this->error("公司配置名称必须以{$data['group']}_开头命名");
            }
            // 验证
            $result = $this->validate($data, 'PayCompany.update');
            if (true !== $result) {
                $this->error($result);
            }
            // 支付类型
            if (isset($data['payment_types'])) {
                $data['payment_type'] = json_encode($data['payment_types']);
            }
            // 每天支付类型对应充值金额限制
            if (isset($data['day_recharge_type_cash_sum'])) {
                $data['day_recharge_type_cash_sum'] = json_encode($data['day_recharge_type_cash_sum']);
            }
            // 支付类型对应的费率
            if (isset($data['payment_type_rate'])) {
                $data['payment_type_rate'] = json_encode($data['payment_type_rate']);
            }
            // 每次最小充值金额
            if (isset($data['min_recharge_cash'])) {
                $data['min_recharge_cash'] = json_encode($data['min_recharge_cash']);
            }
            // 每次最大充值金额
            if (isset($data['max_recharge_cash'])) {
                $data['max_recharge_cash'] = json_encode($data['max_recharge_cash']);
            }
            // 支付类型对应的固定充值金额
            if (isset($data['payment_type_cash'])) {
                $data['payment_type_cash'] = str_replace(' ', '', $data['payment_type_cash']);
                $data['payment_type_cash'] = str_replace("，", ",", $data['payment_type_cash']);
                $data['payment_type_cash'] = json_encode($data['payment_type_cash']);
            }

            $data['bind_merchant'] = str_replace('，', ',', str_replace(' ', '', $data['bind_merchant']));

            $data['notify_ip'] = str_replace('，', ',', str_replace(' ', '', $data['notify_ip']));

            $start_time = explode(':', $data['start_time']);
            $data['start_time'] = $start_time[0] * 3600 + $start_time[1] * 60 + $start_time[2];
            $end_time = explode(':', $data['end_time']);
            $data['end_time'] = $end_time[0] * 3600 + $end_time[1] * 60 + $end_time[2];
            if ($data['end_time'] < $data['start_time']) {
                $this->error('结束时间不能大于开始时间');
            }

            if ($temp = CompanyConfigModel::update($data)) {
                $forward = $this->request->param('_pop') == 1 ? null : cookie('__forward__');
                // 记录行为
                action_log('payment_pay_company_edit', 'payment_pay_company', $temp['id'], UID, json_encode($temp));
                $this->success('编辑成功', $forward, '_close_pop');
            } else {
                $this->error('编辑失败');
            }
        }

        // 获取数据
        $info = CompanyConfigModel::where(['id' => $id])->find();
        if (!$info) {
            $this->error('不存在！');
        }

        // 公司配置分组信息
        $payment_type = pay_config('payment_type');
        $config_group = pay_config('config_group');
        if (isset($config_group['pay_config'])) {
            unset($config_group['pay_config']);
        }
        date_default_timezone_set("Etc/GMT");
        $temp = [
            ['radio', 'group', '公司配置分组', '', $config_group],
            ['checkbox', 'payment_types', '支付类型', '请选择支付类型', $payment_type, json_decode($info['payment_type'], true)],
            ['text', 'title', '公司标题', '一般由中文组成，仅用于显示'],
            ['text', 'name', '公司配置名称', '如果第三方提供的商户号是数字，就填商户号，如 <code>12345678</code>：如果不是数字就填类似拼音，如 <code>baidu</code>'],
            ['text', 'merchant_id', '商户号', '该公司配置的商户号'],
            ['text', 'app_id', '应用id', '该公司配置的应用id'],
            ['textarea', 'key', '密钥', '该公司配置的密钥'],
            ['textarea', 'public_key', '商户公钥', '该公司配置的商户公钥'],
            ['textarea', 'other_public_key', '其他公钥', '该公司配置的其他公钥'],
            ['textarea', 'other_one', '参数一', '其它参数一'],
            ['textarea', 'other_two', '参数二', '其它参数二'],
            ['textarea', 'other_three', '参数三', '其它参数三'],
            ['textarea', 'other_four', '参数四', '其它参数四'],
            ['textarea', 'other_five', '参数五', '其它参数五'],
            ['radio', 'jump_open', '跳转开关', '开启会封装上游网址跳转 <code>开启起风控作用</code>', ['禁用', '启用']],
            ['text', 'domain_name', '域名', '配合跳转开关使用，起风控作用，域名结尾不加斜杠，如<code>https://www.baidu.com</code>'],
            ['text', 'day_recharge_cash_sum', '每天最多充值金额总数', '支付公司<code>每天最多充值金额总数</code>'],
            ['textarea', 'tips', '公司配置说明', '该公司配置的具体说明'],
            ['text', 'sort', '排序', '', 100],
            ['radio', 'refund_open', '退款开关', '', ['禁用', '启用']],
            ['radio', 'status', '状态', '', ['禁用', '启用']],
            ['text', 'second_ok', '创建订单间隔多少秒', '该公司间隔多少秒才能创建订单 <code>默认0不限制</code>'],
            ['text', 'success_count', '通道每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>'],
            ['text', 'vip_user_success', '用户VIP充值每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>'],
            ['text', 'wait_second', '请求上游等待多少秒', '超过等待时间走下一家 <code>默认3秒</code>'],
            ['time', 'start_time', '开始时间', '', '00:00:00'],
            ['time', 'end_time', '结束时间', '', '00:00:00'],
            ['textarea', 'bind_merchant', '绑定白名单商户号', '绑定中的商户号不受此支付公司限制，多个商户号用逗号分隔（,）<code>空表示无绑定</code>'],
            ['textarea', 'notify_ip', '上游服务端通知IP白名单', '多个IP用逗号分隔（,）<code>空表示无限制</code>'],
        ];

        if ($this->role > $this->have_auth) {
            unset($temp[5]);
            unset($temp[6]);
            unset($temp[7]);
            unset($temp[8]);
            unset($temp[9]);
            unset($temp[10]);
            unset($temp[11]);
            unset($temp[12]);
            unset($temp[13]);
        }

        if (!$this->key_see_safe) {
            unset($temp[5]);
            unset($temp[6]);
            unset($temp[7]);
            unset($temp[8]);
            unset($temp[9]);
            unset($temp[10]);
            unset($temp[11]);
            unset($temp[12]);
            unset($temp[13]);
        }

        $day_recharge_type_cash_sum_array = json_decode($info['day_recharge_type_cash_sum'], true);

        $day_recharge_type_cash_sum = [];
        // 支付类型对应每天最多充值金额
        foreach ($payment_type as $key => $value) {
            $day_recharge_type_cash_sum[] = [
                'text',
                'day_recharge_type_cash_sum' . '[' . $key . ']', //name值
                "$value 每天最多充值金额",
                "默认每天最多充值金额为<code>{$this->default_param['merchant_day_recharge_type_cash_sum']}</code>",
                isset($day_recharge_type_cash_sum_array[$key]) ? $day_recharge_type_cash_sum_array[$key] : $this->default_param['merchant_day_recharge_type_cash_sum'],
            ];
        }

        $payment_type_rate_array = json_decode($info['payment_type_rate'], true);

        $payment_type_rate = [];
        // 支付类型对应的费率
        foreach ($payment_type as $key => $value) {
            $payment_type_rate[] = [
                'text',
                'payment_type_rate' . '[' . $key . ']', //name值
                "$value 费率",
                '比如：<code>0.05</code>，用户支付<code>100</code>元，收取手续费<code>5</code>元',
                isset($payment_type_rate_array[$key]) ? $payment_type_rate_array[$key] : 0.03,
            ];
        }

        $min_recharge_cash_array = json_decode($info['min_recharge_cash'], true);

        $min_recharge_cash = [];
        // 每次最少充值金额
        foreach ($payment_type as $key => $value) {
            $min_recharge_cash[] = [
                'text',
                'min_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最少充值金额",
                "默认每次最少充值金额为<code>{$this->default_param['merchant_min_recharge_cash']}</code>",
                isset($min_recharge_cash_array[$key]) ? $min_recharge_cash_array[$key] : $this->default_param['merchant_min_recharge_cash'],
            ];
        }

        $max_recharge_cash_array = json_decode($info['max_recharge_cash'], true);

        $max_recharge_cash = [];
        // 每次最大充值金额
        foreach ($payment_type as $key => $value) {
            $max_recharge_cash[] = [
                'text',
                'max_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最大充值金额",
                "默认每次最大充值金额为<code>{$this->default_param['merchant_max_recharge_cash']}</code>",
                isset($max_recharge_cash_array[$key]) ? $max_recharge_cash_array[$key] : $this->default_param['merchant_max_recharge_cash'],
            ];
        }

        $payment_type_cash_array = json_decode($info['payment_type_cash'], true);

        $payment_type_cash = [];
        // 支付类型对应的固定充值金额
        foreach ($payment_type as $key => $value) {
            $payment_type_cash[] = [
                'text',
                'payment_type_cash' . '[' . $key . ']', //name值
                "$value 对应的固定充值金额",
                "<code>空表示任意金额</code>,多个固定金额请用逗号分开：比如 <code>10,20,30,50,100</code>",
                isset($payment_type_cash_array[$key]) ? $payment_type_cash_array[$key] : '',
            ];
        }

        $group_item = [
            [
                'type' => 'group',
                'options' => [
                    '支付类型对应每天最多充值金额' => $day_recharge_type_cash_sum,
                    '支付类型对应的费率' => $payment_type_rate,
                    '支付类型每次最小充值金额' => $min_recharge_cash,
                    '支付类型每次最大充值金额' => $max_recharge_cash,
                    '支付类型对应的固定充值金额' => $payment_type_cash,
                ]
            ]
        ];

        $trade_pwd = [['password', 'trade_pwd', '交易密码', '6-16位']];
        $items = array_merge($temp, $day_recharge_type_cash_sum, $payment_type_rate, $min_recharge_cash, $max_recharge_cash, $payment_type_cash, $trade_pwd);
        //$items = array_merge($temp, $group_item);
        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑')
            ->addHidden('id')
            ->addFormItems($items)
            ->setFormData($info)
            ->fetch();
    }

    /**
     * 查看
     * @param int $id
     * @return mixed
     */
    public function see($id = 0)
    {
        if ($id === 0) {
            $this->error('参数错误！');
        }

        // 获取数据
        $info = CompanyConfigModel::where(['id' => $id])->find();
        if (!$info) {
            $this->error('不存在！');
        }

        // 公司配置分组信息
        $payment_type = pay_config('payment_type');
        $config_group = pay_config('config_group');
        if (isset($config_group['pay_config'])) {
            unset($config_group['pay_config']);
        }
        date_default_timezone_set("Etc/GMT");
        $temp = [
            ['radio', 'group', '公司配置分组', '', $config_group],
            ['checkbox', 'payment_types', '支付类型', '请选择支付类型', $payment_type, json_decode($info['payment_type'], true), '', 'disabled', ''],
            ['static', 'title', '公司标题', '一般由中文组成，仅用于显示'],
            ['static', 'name', '公司配置名称', '如果第三方提供的商户号是数字，就填商户号，如 <code>12345678</code>：如果不是数字就填类似拼音，如 <code>baidu</code>'],
            ['static', 'merchant_id', '商户号', '该公司配置的商户号'],
            ['static', 'app_id', '应用id', '该公司配置的应用id'],
            ['textarea', 'key', '密钥[:无]', '该公司配置的密钥', '', '', ''],
            ['textarea', 'public_key', '商户公钥[:无]', '该公司配置的商户公钥', '', '', ''],
            ['textarea', 'other_public_key', '其他公钥[:无]', '该公司配置的其他公钥', '', '', ''],
            ['textarea', 'other_one', '参数一', '其它参数一'],
            ['textarea', 'other_two', '参数二', '其它参数二'],
            ['textarea', 'other_three', '参数三', '其它参数三'],
            ['textarea', 'other_four', '参数四', '其它参数四'],
            ['textarea', 'other_five', '参数五', '其它参数五'],
            ['radio', 'jump_open', '跳转开关', '开启会封装上游网址跳转 <code>开启起风控作用</code>', ['禁用', '启用'], '', '', 'disabled', ''],
            ['static', 'domain_name', '域名', '配合跳转开关使用，起风控作用，域名结尾不加斜杠，如<code>https://www.baidu.com</code>'],
            ['static', 'day_recharge_cash_sum', '每天最多充值金额总数', '支付公司<code>每天最多充值金额总数</code>'],
            ['textarea', 'tips', '公司配置说明[:无]', '该公司配置的具体说明', '', 'disabled', ''],
            ['static', 'sort', '排序', '', 100],
            ['radio', 'refund_open', '退款开关', '', ['禁用', '启用'], '', '', 'disabled', ''],
            ['radio', 'status', '状态', '', ['禁用', '启用'], '', '', 'disabled', ''],
            ['static', 'second_ok', '创建订单间隔多少秒', '该公司间隔多少秒才能创建订单 <code>默认0不限制</code>'],
            ['static', 'success_count', '通道每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>'],
            ['static', 'vip_user_success', '用户VIP充值每天最多支付成功次数', '超过次数走下一家 <code>默认0不限制</code>'],
            ['static', 'wait_second', '请求上游等待多少秒', '超过等待时间走下一家 <code>默认3秒</code>'],
            ['time', 'start_time', '开始时间', '', '00:00:00', '', 'disabled'],
            ['time', 'end_time', '结束时间', '', '00:00:00', '', 'disabled'],
            ['textarea', 'bind_merchant', '绑定白名单商户号', '绑定中的商户号不受此支付公司限制，多个商户号用逗号分隔（,）<code>空表示无绑定</code>', '', 'disabled', ''],
            ['textarea', 'notify_ip', '上游服务端通知IP白名单[:无]', '多个IP用逗号分隔（,）<code>空表示无限制</code>', '', 'disabled', ''],
            ['datetime', 'create_time', '创建时间', '', '', 'YYYY-MM-DD HH:mm:ss', 'disabled'],
            ['datetime', 'update_time', '更新时间', '', '', 'YYYY-MM-DD HH:mm:ss', 'disabled'],
        ];

        if ($this->role > $this->have_auth) {
            unset($temp[5]);
            unset($temp[6]);
            unset($temp[7]);
            unset($temp[8]);
            unset($temp[9]);
            unset($temp[10]);
            unset($temp[11]);
            unset($temp[12]);
            unset($temp[13]);
        }

        if (!$this->key_see_safe) {
            unset($temp[5]);
            unset($temp[6]);
            unset($temp[7]);
            unset($temp[8]);
            unset($temp[9]);
            unset($temp[10]);
            unset($temp[11]);
            unset($temp[12]);
            unset($temp[13]);
        }

        $day_recharge_type_cash_sum_array = json_decode($info['day_recharge_type_cash_sum'], true);

        $day_recharge_type_cash_sum = [];
        // 支付类型对应每天最多充值金额
        foreach ($payment_type as $key => $value) {
            $day_recharge_type_cash_sum[] = [
                'static',
                'day_recharge_type_cash_sum' . '[' . $key . ']', //name值
                "$value 每天最多充值金额",
                "默认每天最多充值金额为<code>{$this->default_param['merchant_day_recharge_type_cash_sum']}</code>",
                isset($day_recharge_type_cash_sum_array[$key]) ? $day_recharge_type_cash_sum_array[$key] : $this->default_param['merchant_day_recharge_type_cash_sum'],
            ];
        }

        $payment_type_rate_array = json_decode($info['payment_type_rate'], true);

        $payment_type_rate = [];
        // 支付类型对应的费率
        foreach ($payment_type as $key => $value) {
            $payment_type_rate[] = [
                'static',
                'payment_type_rate' . '[' . $key . ']', //name值
                "$value 费率",
                '比如：<code>0.05</code>，用户支付<code>100</code>元，收取手续费<code>5</code>元',
                isset($payment_type_rate_array[$key]) ? $payment_type_rate_array[$key] : 0.05,
            ];
        }

        $min_recharge_cash_array = json_decode($info['min_recharge_cash'], true);

        $min_recharge_cash = [];
        // 每次最少充值金额
        foreach ($payment_type as $key => $value) {
            $min_recharge_cash[] = [
                'static',
                'min_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最少充值金额",
                "默认每次最少充值金额为<code>{$this->default_param['merchant_min_recharge_cash']}</code>",
                isset($min_recharge_cash_array[$key]) ? $min_recharge_cash_array[$key] : $this->default_param['merchant_min_recharge_cash'],
            ];
        }

        $max_recharge_cash_array = json_decode($info['max_recharge_cash'], true);

        $max_recharge_cash = [];
        // 每次最大充值金额
        foreach ($payment_type as $key => $value) {
            $max_recharge_cash[] = [
                'static',
                'max_recharge_cash' . '[' . $key . ']', //name值
                "$value 每次最大充值金额",
                "默认每次最大充值金额为<code>{$this->default_param['merchant_max_recharge_cash']}</code>",
                isset($max_recharge_cash_array[$key]) ? $max_recharge_cash_array[$key] : $this->default_param['merchant_max_recharge_cash'],
            ];
        }

        $payment_type_cash_array = json_decode($info['payment_type_cash'], true);

        $payment_type_cash = [];
        // 支付类型对应的固定充值金额
        foreach ($payment_type as $key => $value) {
            $payment_type_cash[] = [
                'static',
                'payment_type_cash' . '[' . $key . ']', //name值
                "$value 对应的固定充值金额",
                "<code>空表示任意金额</code>,多个固定金额请用逗号分开：比如 <code>10,20,30,50,100</code>",
                isset($payment_type_cash_array[$key]) ? $payment_type_cash_array[$key] : '',
            ];
        }

        $group_item = [
            [
                'type' => 'group',
                'options' => [
                    '支付类型对应每天最多充值金额' => $day_recharge_type_cash_sum,
                    '支付类型对应的费率' => $payment_type_rate,
                    '支付类型每次最小充值金额' => $min_recharge_cash,
                    '支付类型每次最大充值金额' => $max_recharge_cash,
                    '支付类型对应的固定充值金额' => $payment_type_cash,
                ]
            ]
        ];

        $items = array_merge($temp, $day_recharge_type_cash_sum, $payment_type_rate, $min_recharge_cash, $max_recharge_cash, $payment_type_cash);
        // $items = array_merge($temp, $group_item);
        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('查看')
            ->addHidden('id')
            ->addFormItems($items)
            ->setFormData($info)
            ->hideBtn('submit')
            ->fetch();
    }

    /**
     * 删除
     * @param array $record 
     * @return mixed
     */
    public function delete($record = [])
    {
        return $this->setStatus('delete');
    }

    /**
     * 启用
     * @param array $record 
     * @return mixed
     */
    public function enable($record = [])
    {
        return $this->setStatus('enable');
    }

    /**
     * 禁用
     * @param array $record 
     * @return mixed
     */
    public function disable($record = [])
    {
        return $this->setStatus('disable');
    }

    /**
     * 设置状态：删除、禁用、启用
     * @param string $type 类型：delete/enable/disable
     * @param array $record 
     * @return mixed
     */
    public function setStatus($type = '', $record = [])
    {
        $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
        $ids_delete = is_array($ids) ? '' : $ids;
        $data = CompanyConfigModel::where('id', 'in', $ids)->column('id');
        return parent::setStatus($type, ['payment_pay_company_' . $type, 'payment_pay_company', $ids_delete, UID, implode('、', $data)]);
    }

    /**
     * 快速编辑
     * @param array $record 行为日志
     * @return mixed
     */
    public function quickEdit($record = [])
    {
        $id = input('post.pk', '');
        $field = input('post.name', '');
        $value = input('post.value', '');
        $data = CompanyConfigModel::where('id', $id)->value($field);
        $details = '字段(' . $field . ')，原值(' . $data . ')，新值：(' . $value . ')';
        return parent::quickEdit(['payment_pay_company_edit', 'payment_pay_company', $id, UID, $details]);
    }
}
